package cn.b.sky.user.service;

import cn.b.sky.user.service.model.*;

import java.util.List;

/**
 * 
 * <strong>Title : SecurityService.java<br></strong>
 * <strong>Package : cn.b.sky.user.service<br></strong>
 * <strong>Description : </strong>权限服务<br> 
 * <strong>Create on : 2015-8-18 下午2:00:06<br></strong>
 * <p>
 * @author lidapeng<br>
 * @version <strong>v1.0.0</strong><br>
 * <br>
 * <strong>修改历史:</strong><br>
 * 修改人 | 修改日期 | 修改描述<br>
 * -------------------------------------------<br>
 * <br>
 * <br>
 */
public interface SecurityService {

  /**
   * 
   * <strong>Title : listMenuUrl<br></strong>
   * <strong>Description : </strong>查询特定类型的菜单权限<br> 
   * <strong>Create on : 2015-8-18 下午2:00:25<br></strong>
   * <p>
   * @param resourceTypeECode 资源类型code
   * @return
   * List<MenuUrl>
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<MenuUrl> listMenuUrl(String resourceTypeECode);

  /**
   * 
   * <strong>Title : listMenuByUsername<br></strong>
   * <strong>Description : </strong>通过用户 名（工厂+用户code）获取菜单权限<br> 
   * <strong>Create on : 2017-1-20 下午3:50:38<br></strong>
   * <p>
   * @param username
   * @return
   * List<MenuInfo>
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<MenuInfo> listMenuByUsername(String username);

  /**
   * 
   * <strong>Title : loadUserByUsername<br></strong>
   * <strong>Description : </strong>通过用户 名（工厂+用户code）获取用户<br> 
   * <strong>Create on : 2017-1-20 下午3:51:19<br></strong>
   * <p>
   * @param username
   * @return
   * UserInfo
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  UserInfo loadUserByUsername(String username);

  /**
   * 
   * <strong>Title : loadUser<br></strong>
   * <strong>Description : </strong>通过工厂和用户code获取用户<br> 
   * <strong>Create on : 2017-1-20 下午3:54:20<br></strong>
   * <p>
   * @param siteCode
   * @param userCode
   * @return
   * UserInfo
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  UserInfo loadUser(String siteCode, String userCode);

  /**
   * 
   * <strong>Title : listPermission<br></strong>
   * <strong>Description : </strong>获取用户权限<br> 
   * <strong>Create on : 2017-1-20 下午3:57:19<br></strong>
   * <p>
   * @param siteCode
   * @param userCode
   * @param languageCode
   * @return
   * List<PermissionInfo>
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<PermissionInfo> listPermission(String siteCode, String userCode, String languageCode);

  /**
   * 
   * <strong>Title : login<br></strong>
   * <strong>Description : </strong>用户登录，客户端使用<br> 
   * <strong>Create on : 2017-1-20 下午3:58:51<br></strong>
   * <p>
   * @param siteCode
   * @param userCode
   * @param password
   * @param languageCode
   * @param ipAddress
   * @param macAddress
   * @return
   * Token
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  Token login(String siteCode, String userCode, String password, String languageCode, String ipAddress,
              String macAddress);

  /**
   * 
   * <strong>Title : validateToken<br></strong>
   * <strong>Description : </strong>校验令牌 客户端<br> 
   * <strong>Create on : 2017-1-20 下午3:59:45<br></strong>
   * <p>
   * @param token
   * @return
   * Token
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  Token validateToken(String token);

  /**
   * 
   * <strong>Title : validateClient<br></strong>
   * <strong>Description : </strong>校验客户端ip<br> 
   * <strong>Create on : 2017-1-20 下午4:00:22<br></strong>
   * <p>
   * @param ipAddress
   * @return
   * Token
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  Token validateClient(String ipAddress);

  /**
   * 
   * <strong>Title : logout<br></strong>
   * <strong>Description : </strong>客户端登出<br> 
   * <strong>Create on : 2017-1-20 下午4:00:12<br></strong>
   * <p>
   * @param token
   * void
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void logout(String token);

  /**
   * 
   * <strong>Title : appChangePassword<br></strong>
   * <strong>Description : </strong>客户端修改密码<br> 
   * <strong>Create on : 2015-12-10 下午04:48:31<br></strong>
   * <p>
   * @param siteCode
   * @param userCode
   * @param newPassword
   * void
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void appChangePassword(String siteCode, String userCode, String newPassword);

  /**
   * 
   * <strong>Title : checkPassword<br></strong>
   * <strong>Description : </strong>客户端验证密码<br> 
   * <strong>Create on : 2015-12-10 下午04:48:37<br></strong>
   * <p>
   * @param siteCode
   * @param userCode
   * @param password
   * @return
   * boolean
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  boolean checkPassword(String siteCode, String userCode, String password);

  /**
   * 
   * <strong>Title : checkSiteIsLocked<br></strong>
   * <strong>Description : </strong>检验工厂是否被锁定,返回true表示已锁定<br> 
   * <strong>Create on : 2017-1-20 下午4:02:05<br></strong>
   * <p>
   * @param siteCode
   * @return
   * boolean
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  boolean checkSiteIsLocked(String siteCode);
}
